Multi-core processors can be found in many computing devices today, including servers, desktops, laptops, mobile devices, and systems-on-chips. The move to these multi-core processor systems has allowed the development of parallel programs to take advantage of the enhanced performance. As parallel programs become pervasive in software development environments, an increasing level of attention is focused on the lack of debugging tools for such programs.
Parallel programs, running in a multi-core processor system and sharing memory, can result in non-deterministic executions if not properly synchronized. This non-determinism may arise in different situations, including the many ways in which the different threads of execution interleave in shared memory, making the reproduction and the understanding of a program execution difficult. Such non-deterministic executions can lead to concurrency violations that tend to occur more frequently with an increasing number of shared memory accesses, an increasing number of software threads, and a growing program complexity.